strerror関数は、エラー番号(errnum)に対する説明文を取得します。

#include <string.h>
char *strerror(int errnum);

errnumはエラー番号を指定します。

戻り値として、エラー内容を説明する文字列を返します。また、未定義のエラー番号の場合は「Unknown error nnn」というメッセージを返します。

通常、引数には大域変数errnoを指定すると思いますので、errno.hをインクルードするとよいでしょう。

プログラム 例

#include <stdio.h>
#include <string.h>
#include <errno.h>           /* errno定義 */
#define SIZE 1024

int main(int argc, char **argv)
{
  FILE    *fp;
  char    buff[SIZE];
  int     return_code = 0;

  if (argc == 2) {
    if ((fp = fopen(*(argv + 1), 'r')) != NULL) {
      while(fgets(buff, SIZE, fp) != NULL) {
        printf('%s', buff);
      }

      fclose(fp);
    }
    else {
      fprintf(stderr, 'main() : %s\n', strerror(errno));
      return_code = 1;
    }
  }
  else {
    fprintf(stderr, 'main() : 実行時引数の数が不当です\n');
    return_code = 2;
  }

  return return_code;
}

例の実行結果

$ ./strerror.exe temp_1.txt
Hello World!!.
Bye.
$
$ ./strerror.exe temp_9.txt
main() : No such file or directory
$